#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    GlobalSettings.betterDescriptorsEnabled = false;
    GlobalSettings.resizeEnabled = true;
    GlobalSettings.threshold = 500;
    GlobalSettings.minimalCorrespondence = 10;
    GlobalSettings.resizeTo = 500;
    GlobalSettings.resizeIndex = 1;


    ui->setupUi(this);
    connect(ui->openfile_button, SIGNAL(clicked()), this, SLOT(openFile()));
    connect(ui->openfolder_button, SIGNAL(clicked()), this, SLOT(openFolder()));

    connect(ui->openFileAction, SIGNAL(triggered()), this, SLOT(openFile()));
    connect(ui->openFolderAction, SIGNAL(triggered()), this, SLOT(openFolder()));

    connect(ui->searchButton, SIGNAL(clicked()), this, SLOT(search()));
    connect(ui->closeButton, SIGNAL(clicked()),this,SLOT(close()));
    connect(ui->aboutAction, SIGNAL(triggered()),this, SLOT(showAbout()));
    connect(ui->helpAction, SIGNAL(triggered()),this, SLOT(showHelp()));
    connect(ui->settingsAction, SIGNAL(triggered()), this, SLOT(showSettings()));
    connect(ui->showToolbarAction, SIGNAL(triggered()), this, SLOT(hideToolbar()));
    connect(ui->exitAction,SIGNAL(triggered()), this, SLOT(close()));

    //connect(ui->correspondenceSB,SIGNAL(valueChanged(int)),this,SLOT(changeSettings()));
    //connect(ui->thresholdCB,SIGNAL(currentIndexChanged(int)),this,SLOT(changeSettings()));





}

MainWindow::~MainWindow()
{
    delete ui;

}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::openFile(){
    QString fileName = QFileDialog::getOpenFileName(this, tr("Выберите изображение"), QDir::homePath(), tr("Файлы изображений (*.png *.jpg *.gif)"));
    if (fileName == "")
        return;
    ui->openfile_edit->setText(fileName);
    this->picture = QPixmap(fileName);
    QPixmap picture(fileName);
        ui->imagepreview_label->setPixmap(picture.scaled(QSize(ui->imagepreview_label->width(),
                                                               ui->imagepreview_label->height()),
                                                         Qt::KeepAspectRatio, Qt::SmoothTransformation));

    //Заполняем таблицу "Информация об изображении"
    QImage image(fileName);
    //Первая строка - разрешение
    QTableWidgetItem *item1 = new QTableWidgetItem();
    item1->setData(0, QString::number(image.height())+" x "+QString::number(image.width()));
    ui->tableWidget->setItem(0,1,item1);
    //Вторая строка - формат
    QTableWidgetItem *item2 = new QTableWidgetItem();
    QString format;
    if (fileName.contains(".JPG",Qt::CaseInsensitive) || fileName.contains(".JPEG",Qt::CaseInsensitive) )
    {
        format = "JPEG";
    }
    else if (fileName.contains(".PNG",Qt::CaseInsensitive))
    {
        format = "PNG";
    }
    else if (fileName.contains(".GIF",Qt::CaseInsensitive))
    {
        format = "GIF";
    }
    else
        format = "Unknown";

    //Третья строка - размер
    QTableWidgetItem *item3 = new QTableWidgetItem();
    QFileInfo imageFileInfo(fileName);
    item3->setData(0, QString::number(imageFileInfo.size())+" байт");
    ui->tableWidget->setItem(2,1,item3);

    //Четвертая строка - глубина
    QTableWidgetItem *item4 = new QTableWidgetItem();
    item4->setData(0, QString::number(image.depth())+" bpp");
    ui->tableWidget->setItem(3,1,item4);

    //Пятая строка
    QTableWidgetItem *item5 = new QTableWidgetItem();
    if (image.hasAlphaChannel())
    {
        item5->setData(0,"Есть");
    }
    else
    {
        item5->setData(0,"Отсутствует");
    }
    ui->tableWidget->setItem(4,1,item5);

    //Шестая строка - черно-белое
    QTableWidgetItem *item6 = new QTableWidgetItem();
    if (image.isGrayscale())
    {
        item6->setData(0,"Да");
    }
    else
    {
        item6->setData(0,"Нет");
    }
    ui->tableWidget->setItem(5,1,item6);





    item2->setData(0, format);
    ui->tableWidget->setItem(1,1,item2);

//    item1->setData(0, resPerc.at(i));
//    ui->tableWidget->setItem(i,0, item1);
//    item1->setTextAlignment(Qt::AlignCenter);



    //ui->imagepreview_label->setStyleSheet("background:transparent");
    //ui->imagepreview_label->setAlignment(Qt::AlignLeft);
    this->file = fileName;


};

void MainWindow::openFolder(){
    QString dirName = QFileDialog::getExistingDirectory(this,tr("Выберите каталог"),QDir::homePath());
    if (dirName == "")
        return;
    ui->openfolderedit->setText(dirName);
    this->directory = dirName;
    //Подсчитываем число изображений в каталоге
    QDir directoryObject(dirName);
    QStringList filters;
    filters << "*.jpg" << "*.png" << "*.gif";
    QStringList list = directoryObject.entryList(filters, QDir::Files);
    if (list.size() > 0)
        ui->imagesQuantityLabel->setText(QString("В каталоге найдено ") + QString::number(list.length()) + QString(" изображений форматов JPEG, PNG или GIF"));
    else
        ui->imagesQuantityLabel->setText("<font color=red>В каталоге не найдено изображений форматов JPEG, PNG или GIF!");


};

void MainWindow::search()
{
    if ((file != "") && (directory != ""))
    {
        ProgressDialog dialog(this, file, directory);
        dialog.exec();
    }
    else
    {
        QMessageBox::warning(this, tr("Ошибка"), tr("Не выбраны файл или директория для поиска"),QMessageBox::Ok);
    };

};



void MainWindow::showAbout()
{
    aboutDialog dialog(this);
    dialog.exec();
}

void MainWindow::showHelp()
{
    helpDialog dialog(this);
    dialog.exec();
}

void MainWindow::showSettings()
{
    SettingsDialog dialog(this);
    dialog.exec();
}

void MainWindow::hideToolbar(){
    if(ui->showToolbarAction->isChecked() == false)
    {
        ui->mainToolBar->hide();
    }
    if(ui->showToolbarAction->isChecked() == true)
    {
        ui->mainToolBar->show();
    }

}

void MainWindow::changeSettings()
{
    GlobalSettings.threshold = ui->thresholdCB->currentText().toInt();
    GlobalSettings.minimalCorrespondence = ui->correspondenceSB->value();
    GlobalSettings.resizeIndex = ui->thresholdCB->currentIndex();
}

//void MainWindow::resizeEvent(QResizeEvent *)
//{
//    if (!file)
//        return;
//    QSize scaledSize = this->picture.size();
//    scaledSize.scale(ui->imagepreview_label->size(), Qt::KeepAspectRatio);
//    if (!ui->imagepreview_label->pixmap()
//        || scaledSize != ui->imagepreview_label->pixmap()->size())
//        {
//            ui->imagepreview_label->setPixmap(this->picture.scaled(ui->imagepreview_label->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
//    }
//
//
//
//}
